// 控制流（control flow）、异常处理（error handling）、异步操作（asynchronous actions）和状态（state）还有更棘手的作用（effects）
// 总结
// 控制可以添加在
// 1. 初始化
// 2. pipe函数

// pipe的作用， 注入f，最后调用数据

var Maybe = function(x) {
    this._value = x;
}

Maybe.of = function(x) {
    return new Maybe(x);
}

Maybe.prototype.isNothing = function() {
    return (this._value === null || this._value === undefined)
}

// 每次pipe都会进行null的判断
// 定义一个pipe接口， 传入函数， 并且调用函数进行解析
Maybe.prototype.pipe = function(f) {
    return this.isNothing() ? Maybe.of(null) : Maybe.of(f(this.__value));
}

rst = Maybe.of().pipe(function(two){ return two + 2 })
console.log(rst)


// 还可以作用在初始化函数
var safeHead = function(xs) {
    return Maybe.of(xs[0]);
};
  
// 核心在于统一处理事件的点可以添加钩子
// if else 